home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / tools / utils / vfnt_210 / sysfonts.c < prev    next >
C/C++ Source or Header  |  1995-11-25  |  3KB  |  112 lines

  1. /* die internen System-Zeichensätze als GDOS-Fonts abspeichern
  2.     (c) 1993 Harald Sommerfeldt */
  3.  
  4. /* neu 17.12.93: Die Zeichensätze werden im INTEL-Format abgelegt! */
  5.  
  6.  
  7. #include <linea.h>
  8. #include <stdio.h>
  9.  
  10. /* mit der folgenden Zeile kann man dem Systemzeichensatz eine
  11.    neue Font-ID geben, um sich z.B. für einen vorhandenen Zeichensatz
  12.    einen passenden SMALL-Zeichensatz (für die Laufwerks- und Datei-
  13.    Icons) zu generieren */
  14. /* #define NEWID 123 */
  15.  
  16. void    SINTEL( short *s )
  17. {
  18.     char    c;
  19.  
  20.     c = ((char *)s)[0];
  21.     ((char *)s)[0] = ((char *)s)[1];
  22.     ((char *)s)[1] = c;
  23. }
  24. void    LINTEL( long *l )
  25. {
  26.     short    s;
  27.  
  28.     s = ((short *)l)[0];
  29.     ((short *)l)[0] = ((short *)l)[1];
  30.     ((short *)l)[1] = s;
  31.     SINTEL( &((short *)l)[0] );
  32.     SINTEL( &((short *)l)[1] );
  33. }
  34.  
  35. main()
  36. {
  37.     FONT_HDR    *font, f;
  38.     short    ch_ofst[257];
  39.     char    buffer[128];
  40.     FILE    *fp;
  41.     int    i;
  42.  
  43.     linea_init();
  44.     font = Vdiesc->font_ring[0];
  45.     for (;;)
  46.     {
  47.         printf( "id %d, size %d, name %s\n",
  48.             font->id, font->size, font->facename );
  49.         printf( "hor_table %p, off_table %p, dat_table %p\n",
  50.             font->hz_ofst, font->ch_ofst, font->fnt_dta );
  51.         printf( "form_width %d, form_height %d\n",
  52.             font->frm_wdt, font->frm_hgt );
  53.         printf( "flags.f68000: %s\n",
  54.             (font->flags.f68000) ? "TRUE" : "FALSE" );
  55.         printf( "\n" );
  56.  
  57.         f = *font;
  58. #ifdef NEWID
  59.         f.id = NEWID;
  60. #endif
  61.         sprintf( buffer, "SYS%d_%02d.FNT", f.id, f.size );
  62.         fp = fopen( buffer, "wb" );
  63.         f.hz_ofst = (void *)0L;
  64.         f.ch_ofst = (void *)sizeof(FONT_HDR);
  65.         f.fnt_dta = (short *)sizeof(FONT_HDR) + 257;
  66.         f.next = (void *)0L;
  67.         if ( font->flags.f68000 )
  68.         {
  69.             SINTEL( (short *)&f.id );
  70.             SINTEL( (short *)&f.size );
  71.             SINTEL( (short *)&f.ade_lo );
  72.             SINTEL( (short *)&f.ade_hi );
  73.             SINTEL( (short *)&f.top_dist );
  74.             SINTEL( (short *)&f.asc_dist );
  75.             SINTEL( (short *)&f.hlf_dist );
  76.             SINTEL( (short *)&f.des_dist );
  77.             SINTEL( (short *)&f.bot_dist );
  78.             SINTEL( (short *)&f.wchr_wdt );
  79.             SINTEL( (short *)&f.wcel_wdt );
  80.             SINTEL( (short *)&f.lft_ofst );
  81.             SINTEL( (short *)&f.rgt_ofst );
  82.             SINTEL( (short *)&f.thckning );
  83.             SINTEL( (short *)&f.undrline );
  84.             SINTEL( (short *)&f.lghtng_m );
  85.             SINTEL( (short *)&f.skewng_m );
  86.             f.flags.f68000 = 0;
  87.             SINTEL( (short *)&f.flags );
  88.             f.flags.f68000 = 0;
  89.             LINTEL( (long *)&f.hz_ofst );
  90.             LINTEL( (long *)&f.ch_ofst );
  91.             LINTEL( (long *)&f.fnt_dta );
  92.             SINTEL( (short *)&f.frm_wdt );
  93.             SINTEL( (short *)&f.frm_hgt );
  94.             LINTEL( (long *)&f.next );
  95.         }
  96.         fwrite( &f, sizeof(FONT_HDR), 1, fp );
  97.  
  98.         for ( i = 0; i < 257; i++ )
  99.         {
  100.             ch_ofst[i] = font->ch_ofst[i];
  101.             if ( font->flags.f68000 ) SINTEL( &ch_ofst[i] );
  102.         }
  103.         fwrite( ch_ofst, sizeof(short), 257, fp );
  104.  
  105.         fwrite( font->fnt_dta, font->frm_wdt, font->frm_hgt, fp );
  106.  
  107.         fclose( fp );
  108.         if ( (font = font->next) == NULL ) break;
  109.     }
  110.     return 0;
  111. }
  112.